package com.lxl.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.lxl.dao.BookDao;
import com.lxl.model.Book;

/**
 * @author 刘星鹭
 * @Email liuxinglumail@163.com
 * @version 创建时间： 2014年9月12日 下午3:48:49
 */
public class BookDaoImpl implements BookDao {

	@Override
	public void persist(Book book) { // 以下为CRUD方法

		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("myJPA");// 创建事务管理器工厂
		EntityManager em = factory.createEntityManager();// 创建事务管理器
		em.getTransaction().begin();// 开始事务，只有写入数据要开事务，读取不要
		em.persist(book);
		em.getTransaction().commit();// 提交事务
		em.close();// 关闭事务管理器
		factory.close();// 关闭事务管理器功能工厂

	}

	@Override
	public void delete(Integer bookNo) {

		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("myJPA");// 创建事务管理器工厂
		EntityManager em = factory.createEntityManager();// 创建事务管理器
		em.getTransaction().begin();// 开始事务，只有写入数据要开事务，读取不要
		em.remove(em.merge(get(bookNo)));
		em.getTransaction().commit();// 提交事务
		em.close();// 关闭事务管理器
		factory.close();// 关闭事务管理器功能工厂

	}

	@Override
	public void merge(Integer oldBookNo, Book newBook) {

		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("myJPA");// 创建事务管理器工厂
		EntityManager em = factory.createEntityManager();// 创建事务管理器
		em.getTransaction().begin();// 开始事务，只有写入数据要开事务，读取不要
		newBook.setBookNo(oldBookNo);
		em.merge(newBook);
		em.getTransaction().commit();// 提交事务
		em.close();// 关闭事务管理器
		factory.close();// 关闭事务管理器功能工厂

	}

	@Override
	public Book get(Integer bookNo) {
		
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("myJPA");// 创建事务管理器工厂
		EntityManager em = factory.createEntityManager();// 创建事务管理器
		em.getTransaction().begin();// 开始事务，只有写入数据要开事务，读取不要
		Book book = em.find(Book.class, bookNo);
		em.getTransaction().commit();// 提交事务
		em.close();// 关闭事务管理器
		factory.close();// 关闭事务管理器功能工厂
		return book;
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Book> list() {
		
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("myJPA");// 创建事务管理器工厂
		EntityManager em = factory.createEntityManager();// 创建事务管理器
		em.getTransaction().begin();// 开始事务，只有写入数据要开事务，读取不要
		List<Book> list = em.createQuery("from Book").getResultList();
		em.getTransaction().commit();// 提交事务
		em.close();// 关闭事务管理器
		factory.close();// 关闭事务管理器功能工厂
		return list;
		
	}
}
